from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation

# Create your models here.
class Electrics(models.Model):
    """
    id    name      price
    1    海信电视    3999.10
    2    西门子冰箱  4999.00
    3    美的空调    2899.89
    ......
    """
    objects = models.Manager()
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    coupons = GenericRelation(to='Coupon')

    def __str__(self):
        return self.name

    def __call__(self, args=None):
        if args == "price":
            return self.price
        else:
            return self.name

class Foods(models.Model):
    """
    id    name    price
    1     面包    5.00
    2     炒饭    12.01
    ......
    """
    objects = models.Manager()
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    coupons = GenericRelation(to="Coupon")

class Clothes(models.Model):
    """
    id    name    price
    1     毛衣    21.05
    2     T恤     53.11
    ......
    """
    objects = models.Manager()
    name = models.CharField(max_length=32)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    coupos = GenericRelation(to="Coupon")

    def __str__(self):
        return self.name

class Coupon(models.Model):
    #关联方法一
    """
    优惠券表 对应 多个商品表，关系表的结构就要多加一个字段 繁琐复杂的操作
    id    name 　　　electric_id 　　food_id   cloth_id   more...
    1   通用优惠券 　　null　　　　　　 null      null
    2   冰箱满减券 　　2　　　　　　　 　null 　　  null
    3   面包狂欢节 　　null　　　　　  　1 　　　　 null

    name = models.CharField(max_length=32)
    electric = models.ForeignKey(to='Electrics', null=True)
    food = models.ForeignKey(to='Foods', null=True)
    cloth = models.ForeignKey(to='Clothes', null=True)
    """
    #关联方法二
    """
    通过django 自带的content_type表建立关系,可以省去 每新增一张表 增加一个字段，结构明显清晰很多
    id    name                   content_type_id      object_id_id 
    1    美的满减优惠券            9（电器表electrics,id=9的商品）  3
    2    猪蹄买一送一优惠券        10                    2
    3    南极被子买200减50优惠券   11                    1
    ......
    """
    objects = models.Manager()
    name = models.CharField(max_length=32)
    content_type = models.ForeignKey(to=ContentType, on_delete=models.CASCADE)
    object_id = models.PositiveIntegerField()
    content_obj = GenericForeignKey("content_type", "object_id")
    def __str__(self):
        return self.name
